ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA0NzQ1YzhmLi4yYzhjMzM2IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTkgQEAKIENoYW5nZXMgc2luY2UgVS1Cb290IDEuMC4wOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisqIFBhdGNoIGJ5IEFuZHLpIFNjaHdhcnosIDggRGVjIDIwMDM6CisgIGZpeGVzIGZvciBEYXZpY29tIERNOTEwMkEgRXRoZXJuZXQgQ2hpcCAoI2RlZmluZSBDT05GSUdfVFVMSVBfRklYX0RBVklDT00pOgorICAtIFRYIGFuZCBSWCBkZXNrcmlwdG9ycyBtdXN0IGJlIHF1YWQtd29yZCBhbGlnbmVkCisgIC0gZG9lcyBub3Qgd29yayB3aXRoIG9ubHkgb25lIFRYIGRlc2tyaXB0b3IKKyAgLSBzdGFuZGFyZCByZXNldCBtZXRob2QgZG9lcyBub3Qgd29yaworCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IERlYyAyMDAzOgorICBhZGQgUlRMODEzOSBldGhlcm5ldCBkcml2ZXIKKworKiBQYXRjaGVzIGJ5IEVkIE9rZXJzb24sIDA3IERlYyAyMDAzOgorICAtIGZpeCBldGhlcm5ldCBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4KKyAgLSBleHRlbmQgbWVtc2V0dXAuUyBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIEJFIGFuZCBMRSBtb2RlcworCiAqIE1pbm9yIGNvZGUgY2xlYW51cCAoY29kaW5nIHN0eWxlKQogCiAqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAzMCBEZWMgMjAwMzoKZGlmZiAtLWdpdCBhL2JvYXJkL2RiYXUxeDAwL21lbXNldHVwLlMgYi9ib2FyZC9kYmF1MXgwMC9tZW1zZXR1cC5TCmluZGV4IDZjNjFlNmYuLmQyYTE3YTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RiYXUxeDAwL21lbXNldHVwLlMKKysrIGIvYm9hcmQvZGJhdTF4MDAvbWVtc2V0dXAuUwpAQCAtNCwxMTQgKzQsMzU4IEBACiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KICNpbmNsdWRlIDxhc20vYXUxeDAwLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisKKyNkZWZpbmUgQVUxNTAwX1NZU19BRERSCQkweEIxOTAwMDAwCisjZGVmaW5lIHN5c19lbmRpYW4JCTB4MDAzOAorI2RlZmluZSBDUDBfQ29uZmlnMAkJJDE2CisjZGVmaW5lIE1FTV8xTVMJCQkoKDM5NjAwMDAwMC8xMDAwMDAwKSAqIDEwMDApCisKKwkudGV4dAorCS5zZXQgbm9yZW9yZGVyCisJLnNldCBtaXBzMzIKIAogCS5nbG9ibAltZW1zZXR1cAogbWVtc2V0dXA6Ci0JLyogRmlyc3Qgc2V0dXAgcGxsOnMgdG8gbWFrZSBzZXJpYWwgd29yayBvayAqLwotCS8qIFdlIGhhdmUgYSAxMiBNSHogY3J5c3RhbCAqLwotCWxpICAgICAgICAgICAgICB0MCwgU1lTX0NQVVBMTAotCWxpICAgICAgICAgICAgICB0MSwgMHgyMSAvKiAzOTYgTUh6ICovCi0Jc3cgICAgICAgICAgICAgIHQxLCAwKHQwKQotCXN5bmMKKwkvKgorCSAqIFN0ZXAgMSkgRXN0YWJsaXNoIENQVSBlbmRpYW4gbW9kZS4KKwkgKiBEYjE1MDAtc3BlY2lmaWM6CisJICogU3dpdGNoIFMxLjEgT2ZmKGJpdDcgcmVhZHMgMSkgaXMgTGl0dGxlIEVuZGlhbgorCSAqIFN3aXRjaCBTMS4xIE9uIChiaXQ3IHJlYWRzIDApIGlzIEJpZyBFbmRpYW4KKwkgKi8KKwlsaQl0MCwgTUVNX1NUQ0ZHMQorCWxpCXQxLCAweDAwMDAwMDgwCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgTUVNX1NUVElNRTEKKwlsaQl0MSwgMHgyMjA4MGEyMAorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIE1FTV9TVEFERFIxCisJbGkJdDEsIDB4MTBjMDNmMDAKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCAweEFFMDAwMDA4CisJbHcJdDEsMCh0MCkKKwlhbmRpCXQxLHQxLDB4ODAKKwliZXEJemVybyx0MSxiaWdfZW5kaWFuCisJbm9wCitsaXR0bGVfZW5kaWFuOgorCisJLyogQ2hhbmdlIEF1MSBjb3JlIHRvIGxpdHRsZSBlbmRpYW4gKi8KKwlsaQl0MCwgQVUxNTAwX1NZU19BRERSCisJbGkJdDEsIDEKKwlzdwl0MSwgc3lzX2VuZGlhbih0MCkKKwltZmMwCXQyLCBDUDBfQ09ORklHCisJbXRjMAl0MiwgQ1AwX0NPTkZJRworCW5vcAogCW5vcAogCisJLyogQmlnIEVuZGlhbiBpcyBkZWZhdWx0IHNvIG5vdGhpbmcgdG8gZG8gYnV0IGZhbGwgdGhyb3VnaCAqLworCitiaWdfZW5kaWFuOgorCisJLyoKKwkgKiBTdGVwIDIpIEVzdGFibGlzaCBTdGF0dXMgUmVnaXN0ZXIKKwkgKiAoc2V0IEJFViwgY2xlYXIgRVJMLCBjbGVhciBFWEwsIGNsZWFyIElFKQorCSAqLworCWxpCXQxLCAweDAwNDAwMDAwCisJbXRjMAl0MSwgQ1AwX1NUQVRVUworCisJLyoKKwkgKiBTdGVwIDMpIEVzdGFibGlzaCBDUDAgQ29uZmlnMAorCSAqIChzZXQgT0QsIHNldCBLMD0zKQorCSAqLworCWxpCXQxLCAweDAwMDgwMDAzCisJbXRjMAl0MSwgQ1AwX0NPTkZJRworCisJLyoKKwkgKiBTdGVwIDQpIERpc2FibGUgV2F0Y2hwb2ludCBmYWNpbGl0aWVzCisJICovCisJbGkgdDEsIDB4MDAwMDAwMDAKKwltdGMwCXQxLCBDUDBfV0FUQ0hMTworCW10YzAJdDEsIENQMF9JV0FUQ0hMTworCS8qCisJICogU3RlcCA1KSBEaXNhYmxlIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycworCSAqLworCW10YzAJemVybywgQ1AwX1BFUkZPUk1BTkNFCisJbm9wCisKKwkvKgorCSAqIFN0ZXAgNikgRXN0YWJsaXNoIEVKVEFHIERlYnVnIHJlZ2lzdGVyCisJICovCisJbXRjMAl6ZXJvLCBDUDBfREVCVUcKKwlub3AKKworCS8qCisJICogU3RlcCA3KSBFc3RhYmxpc2ggQ2F1c2UKKwkgKiAoc2V0IElWIGJpdCkKKwkgKi8KKwlsaQl0MSwgMHgwMDgwMDAwMAorCW10YzAJdDEsIENQMF9DQVVTRQorCisJLyogRXN0YWJsaXNoIFdpcmVkIChhbmQgUmFuZG9tKSAqLworCW10YzAJemVybywgQ1AwX1dJUkVECisJbm9wCisKKwkvKiBGaXJzdCBzZXR1cCBwbGw6cyB0byBtYWtlIHNlcmlhbCB3b3JrIG9rICovCisJLyogV2UgaGF2ZSBhIDEyIE1IeiBjcnlzdGFsICovCisJbGkJdDAsIFNZU19DUFVQTEwKKwlsaQl0MSwgMHgyMSAgLyogMzk2IE1IeiAqLworCXN3CXQxLCAwKHQwKQorCXN5bmMKKwlub3AKKwlub3AKKworCS8qIHdhaXQgMW1TIGZvciBjbG9ja3MgdG8gc2V0dGxlICovCisJbGkJdDEsIE1FTV8xTVMKKzE6CWFkZAl0MSwgLTEKKwlibmUJdDEsIHplcm8sIDFiCisJbm9wCiAJLyogU2V0dXAgQVVYIFBMTCAqLwotCWxpICAgICAgICAgICAgICB0MCwgU1lTX0FVWFBMTAotCWxpICAgICAgICAgICAgICB0MSwgOCAvKiA5NiBNSHogKi8KLQlzdyAgICAgICAgICAgICAgdDEsIDAodDApIC8qIGF1eCBwbGwgKi8KLQlzeW5jCi0KLS8qIFNEQ1MgMCwxIFNEUkFNICovCi0JbGkJCXQwLCBNRU1fU0RNT0RFMAotCWxpCQl0MSwgMHgwMDU1MjJBQQotCXN3CQl0MSwgMCh0MCkKLQotCWxpICAgICAgICAgICAgICB0MCwgTUVNX1NETU9ERTEKLQlsaQkJdDEsIDB4MDA1NTIyQUEKLQlzdwkJdDEsIDAodDApCi0KLQlsaSAgICAgICAgICAgICAgdDAsIE1FTV9TREFERFIwCi0JbGkJCXQxLCAweDAwMTAwM0Y4Ci0Jc3cJCXQxLCAwKHQwKQotCi0KLQlsaSAgICAgICAgICAgICAgdDAsIE1FTV9TREFERFIxCi0JbGkJCXQxLCAweDAwMTAyM0Y4Ci0Jc3cJCXQxLCAwKHQwKQotCXN5bmMKLQotCWxpICAgICAgICAgICAgICB0MCwgTUVNX1NEUkVGQ0ZHCi0JbGkJCXQxLCAweDY0MDAwQzI0IC8qIERpc2FibGUgKi8KLQlzdwkJdDEsIDAodDApCi0Jc3luYwotCi0JbGkgICAgICAgICAgICAgIHQwLCBNRU1fU0RQUkVDTUQKLQlzdwkJemVybywgMCh0MCkKLQlzeW5jCi0KLQlsaSAgICAgICAgICAgICAgdDAsIE1FTV9TREFVVE9SRUYKLQlzdwkJemVybywgMCh0MCkKLQlzeW5jCi0Jc3cJCXplcm8sIDAodDApCi0Jc3luYwotCi0JbGkgICAgICAgICAgICAgIHQwLCBNRU1fU0RSRUZDRkcKLQlsaQkJdDEsIDB4NjYwMDBDMjQgLyogRW5hYmxlICovCi0Jc3cJCXQxLCAwKHQwKQotCXN5bmMKLQotCWxpICAgICAgICAgICAgICB0MCwgTUVNX1NEV1JNRDAKLQlsaQkJdDEsIDB4MDAwMDAwMzMKLQlzdwkJdDEsIDAodDApCi0Jc3luYwotCi0JbGkgICAgICAgICAgICAgIHQwLCBNRU1fU0RXUk1EMQotCWxpCQl0MSwgMHgwMDAwMDAzMwotCXN3CQl0MSwgMCh0MCkKKwlsaQl0MCwgU1lTX0FVWFBMTAorCWxpCXQxLCAweDIwIC8qIDk2IE1IeiAqLworCXN3CXQxLCAwKHQwKSAvKiBhdXggcGxsICovCiAJc3luYwogCiAJLyogIFN0YXRpYyBtZW1vcnkgY29udHJvbGxlciAqLwogCiAJLyogUkNFMCBBTUQgMjlMVjY0ME0gTWlycm9yQml0IEZsYXNoICovCi0JbGkgICAgICAgICAgICAgIHQwLCBNRU1fU1RDRkcwCi0JbGkJCXQxLCAweDAwMDAwMDAzCi0Jc3cJCXQxLCAwKHQwKQorCWxpCXQwLCBNRU1fU1RDRkcwCisJbGkJdDEsIDB4MDAwMDAwMTMKKwlzdwl0MSwgMCh0MCkKIAotCWxpCQl0MCwgTUVNX1NUVElNRTAKLQlsaQkJdDEsIDB4MjIwODBiMjAKLQlzdwkJdDEsIDAodDApCisJbGkJdDAsIE1FTV9TVFRJTUUwCisJbGkJdDEsIDB4MDQwMTgxRDcKKwlzdwl0MSwgMCh0MCkKIAotCWxpCQl0MCwgTUVNX1NUQUREUjAKLQlsaQkJdDEsIDB4MTFFMDNGODAKLQlzdwkJdDEsIDAodDApCisJbGkJdDAsIE1FTV9TVEFERFIwCisJbGkJdDEsIDB4MTFFMDNGODAKKwlzdwl0MSwgMCh0MCkKIAogCS8qIFJDRTEgQ1BMRCBCb2FyZCBMb2dpYyAqLwotCWxpCQl0MCwgTUVNX1NUQ0ZHMQotCWxpCQl0MSwgMHgwMDAwMDA4MAotCXN3CQl0MSwgMCh0MCkKKwlsaQl0MCwgTUVNX1NUQ0ZHMQorCWxpCXQxLCAweDAwMDAwMDgwCisJc3cJdDEsIDAodDApCiAKLQlsaQkJdDAsIE1FTV9TVFRJTUUxCi0JbGkJCXQxLCAweDIyMDgwYTIwCi0Jc3cJCXQxLCAwKHQwKQorCWxpCXQwLCBNRU1fU1RUSU1FMQorCWxpCXQxLCAweDIyMDgwYTIwCisJc3cJdDEsIDAodDApCiAKLQlsaQkJdDAsIE1FTV9TVEFERFIxCi0JbGkJCXQxLCAweDEwYzAzZjAwCi0Jc3cJCXQxLCAwKHQwKQorCWxpCXQwLCBNRU1fU1RBRERSMQorCWxpCXQxLCAweDEwYzAzZjAwCisJc3cJdDEsIDAodDApCisKKwkvKiBSQ0UyIENQTEQgQm9hcmQgTG9naWMgKi8KKwlsaQl0MCwgTUVNX1NUQ0ZHMgorCWxpCXQxLCAweDAwMDAwMDAwCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgTUVNX1NUVElNRTIKKwlsaQl0MSwgMHgwMDAwMDAwMAorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIE1FTV9TVEFERFIyCisJbGkJdDEsIDB4MDAwMDAwMDAKKwlzdwl0MSwgMCh0MCkKIAogCS8qIFJDRTMgUENNQ0lBIDI1MG5zICovCi0JbGkJCXQwLCBNRU1fU1RDRkczCi0JbGkJCXQxLCAweDAwMDAwMDAyCi0Jc3cJCXQxLCAwKHQwKQorCWxpCXQwLCBNRU1fU1RDRkczCisJbGkJdDEsIDB4MDAwMDAwMDIKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBNRU1fU1RUSU1FMworCWxpCXQxLCAweDI4MEUzRTA3CisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgTUVNX1NUQUREUjMKKwlsaQl0MSwgMHgxMDAwMDAwMAorCXN3CXQxLCAwKHQwKQorCisJc3luYworCisJLyogU2V0IHBlcmlwaGVyYWxzIHRvIGEga25vd24gc3RhdGUgKi8KKwlsaQl0MCwgSUMwX0NGRzBDTFIKKwlsaQl0MSwgMHhGRkZGRkZGRgorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIElDMF9DRkcwQ0xSCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgSUMwX0NGRzFDTFIKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBJQzBfQ0ZHMkNMUgorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIElDMF9TUkNTRVQKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBJQzBfQVNTSUdOU0VUCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgSUMwX1dBS0VDTFIKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBJQzBfUklTSU5HQ0xSCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgSUMwX0ZBTExJTkdDTFIKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBJQzBfVEVTVEJJVAorCWxpCXQxLCAweDAwMDAwMDAwCisJc3cJdDEsIDAodDApCisJc3luYworCisJbGkJdDAsIElDMV9DRkcwQ0xSCisJbGkJdDEsIDB4RkZGRkZGRkYKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBJQzFfQ0ZHMENMUgorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIElDMV9DRkcxQ0xSCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgSUMxX0NGRzJDTFIKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBJQzFfU1JDU0VUCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgSUMxX0FTU0lHTlNFVAorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIElDMV9XQUtFQ0xSCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgSUMxX1JJU0lOR0NMUgorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIElDMV9GQUxMSU5HQ0xSCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgSUMxX1RFU1RCSVQKKwlsaQl0MSwgMHgwMDAwMDAwMAorCXN3CXQxLCAwKHQwKQorCXN5bmMKKworCWxpCXQwLCBTWVNfRlJFUUNUUkwwCisJbGkJdDEsIDB4MDAwMDAwMDAKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBTWVNfRlJFUUNUUkwxCisJbGkJdDEsIDB4MDAwMDAwMDAKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBTWVNfQ0xLU1JDCisJbGkJdDEsIDB4MDAwMDAwMDAKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBTWVNfUElOSU5QVVRFTgorCWxpCXQxLCAweDAwMDAwMDAwCisJc3cJdDEsIDAodDApCisJc3luYworCisJbGkJdDAsIDB4QjExMDAxMDAKKwlsaQl0MSwgMHgwMDAwMDAwMAorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIDB4QjE0MDAxMDAKKwlsaQl0MSwgMHgwMDAwMDAwMAorCXN3CXQxLCAwKHQwKQogCiAKLQlsaQkJdDAsIE1FTV9TVFRJTUUzCi0JbGkJCXQxLCAweDI4MEUzRTA3Ci0Jc3cJCXQxLCAwKHQwKQorCWxpCXQwLCBTWVNfV0FLRU1TSworCWxpCXQxLCAweDAwMDAwMDAwCisJc3cJdDEsIDAodDApCiAKLQlsaQkJdDAsIE1FTV9TVEFERFIzCi0JbGkJCXQxLCAweDEwMDAwMDAwCi0Jc3cJCXQxLCAwKHQwKQorCWxpCXQwLCBTWVNfV0FLRVNSQworCWxpCXQxLCAweDAwMDAwMDAwCisJc3cJdDEsIDAodDApCiAKKwkvKiB3YWl0IDFtUyBiZWZvcmUgc2V0dXAgKi8KKwlsaQl0MSwgTUVNXzFNUworMToJYWRkCXQxLCAtMQorCWJuZQl0MSwgemVybywgMWIKKwlub3AKKworLyogU0RDUyAwLDEgU0RSQU0gKi8KKwlsaQl0MCwgTUVNX1NETU9ERTAKKwlsaQl0MSwgMHgwMDU1MjJBQQorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIE1FTV9TRE1PREUxCisJbGkJdDEsIDB4MDA1NTIyQUEKKwlzdwl0MSwgMCh0MCkKKworCWxpCXQwLCBNRU1fU0RNT0RFMgorCWxpCXQxLCAweDAwMDAwMDAwCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgTUVNX1NEQUREUjAKKwlsaQl0MSwgMHgwMDEwMDNGOAorCXN3CXQxLCAwKHQwKQorCisKKwlsaQl0MCwgTUVNX1NEQUREUjEKKwlsaQl0MSwgMHgwMDEwMjNGOAorCXN3CXQxLCAwKHQwKQorCisJbGkJdDAsIE1FTV9TREFERFIyCisJbGkJdDEsIDB4MDAwMDAwMDAKKwlzdwl0MSwgMCh0MCkKKworCXN5bmMKKworCWxpCXQwLCBNRU1fU0RSRUZDRkcKKwlsaQl0MSwgMHg2NDAwMEMyNCAvKiBEaXNhYmxlICovCisJc3cJdDEsIDAodDApCisJc3luYworCisJbGkJdDAsIE1FTV9TRFBSRUNNRAorCXN3CXplcm8sIDAodDApCisJc3luYworCisJbGkJdDAsIE1FTV9TREFVVE9SRUYKKwlzdwl6ZXJvLCAwKHQwKQorCXN5bmMKKwlzdwl6ZXJvLCAwKHQwKQorCXN5bmMKKworCWxpCXQwLCBNRU1fU0RSRUZDRkcKKwlsaQl0MSwgMHg2NjAwMEMyNCAvKiBFbmFibGUgKi8KKwlzdwl0MSwgMCh0MCkKKwlzeW5jCisKKwlsaQl0MCwgTUVNX1NEV1JNRDAKKwlsaQl0MSwgMHgwMDAwMDAzMworCXN3CXQxLCAwKHQwKQorCXN5bmMKKworCWxpCXQwLCBNRU1fU0RXUk1EMQorCWxpCXQxLCAweDAwMDAwMDMzCisJc3cJdDEsIDAodDApCisJc3luYworCisJLyogd2FpdCAxbVMgYWZ0ZXIgc2V0dXAgKi8KKwlsaQl0MSwgTUVNXzFNUworMToJYWRkCXQxLCAtMQorCWJuZQl0MSwgemVybywgMWIKKwlub3AKKworCWxpCXQwLCBTWVNfUElORlVOQworCWxpCXQxLCAweDAwMDA4MDgwCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgU1lTX1RSSU9VVENMUgorCWxpCXQxLCAweDAwMDAxRkZGCisJc3cJdDEsIDAodDApCisKKwlsaQl0MCwgU1lTX09VVFBVVENMUgorCWxpCXQxLCAweDAwMDA4MDAwCisJc3cJdDEsIDAodDApCiAJc3luYwogCiAJaglyYQpkaWZmIC0tZ2l0IGEvY3B1L21pcHMvYXUxeDAwX2V0aC5jIGIvY3B1L21pcHMvYXUxeDAwX2V0aC5jCmluZGV4IGFlNTFiNzUuLjRmNjhhOWIgMTAwNjQ0Ci0tLSBhL2NwdS9taXBzL2F1MXgwMF9ldGguYworKysgYi9jcHUvbWlwcy9hdTF4MDBfZXRoLmMKQEAgLTE4NywxOSArMTg3LDI0IEBACiAJfQogCiAJLyogUHV0IG1hYyBhZGRyIGluIGxpdHRsZSBlbmRpYW4gKi8KLQkvKiBGSVhNRSBDaGVjayB0aGlzIGZvciBsaXR0bGUgZW5kaWFuIG1vZGUgKi8KICNkZWZpbmUgZWEgZXRoX2dldF9kZXYoKS0+ZW5ldGFkZHIKIAkqbWFjX2FkZHJfaGlnaCAgPQkoZWFbNV0gPDwgIDgpIHwgKGVhWzRdCSAgICApIDsKIAkqbWFjX2FkZHJfbG93ICAgPQkoZWFbM10gPDwgMjQpIHwgKGVhWzJdIDw8IDE2KSB8CiAJCShlYVsxXSA8PCAgOCkgfCAoZWFbMF0gICAgICApIDsKICN1bmRlZiBlYQotCiAJKm1hY19tY2FzdF9sb3cgPSAwOwogCSptYWNfbWNhc3RfaGlnaCA9IDA7CiAKKwkvKiBNYWtlIHN1cmUgdGhlIE1BQyBidWZmZXIgaXMgaW4gdGhlIGNvcnJlY3QgZW5kaWFuIG1vZGUgKi8KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKwkqbWFjX2N0cmwgPSBNQUNfRlVMTF9EVVBMRVg7CisJdWRlbGF5KDEpOworCSptYWNfY3RybCA9IE1BQ19GVUxMX0RVUExFWHxNQUNfUlhfRU5BQkxFfE1BQ19UWF9FTkFCTEU7CisjZWxzZQogCSptYWNfY3RybCA9IE1BQ19CSUdfRU5ESUFOfE1BQ19GVUxMX0RVUExFWDsKIAl1ZGVsYXkoMSk7CiAJKm1hY19jdHJsID0gTUFDX0JJR19FTkRJQU58TUFDX0ZVTExfRFVQTEVYfE1BQ19SWF9FTkFCTEV8TUFDX1RYX0VOQUJMRTsKKyNlbmRpZgogCiAJcmV0dXJuKDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggMWVlNTIwZi4uMTVmYjM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0zNiw3ICszNiw3IEBACiAJICBuczE2NTUwLm8gbnM4MzgyeC5vIG5zODczMDgubyBcCiAJICBwY2kubyBwY2lfYXV0by5vIHBjaV9pbmRpcmVjdC5vIFwKIAkgIHBjbmV0Lm8gcGxiMjgwMF9ldGgubyBcCi0JICBydGw4MDE5Lm8gXAorCSAgcnRsODAxOS5vIHJ0bDgxMzkubyBcCiAJICBzM2MyNHgwX2kyYy5vIHNlZDEzODA2Lm8gc2VyaWFsLm8gXAogCSAgc2VyaWFsX21heDMxMDAubyBcCiAJICBzbWM5MTExMS5vIHNtaUx5bnhFTS5vICAgICAgICAgICAgICBzeW01M2M4eHgubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RjMjExNHguYyBiL2RyaXZlcnMvZGMyMTE0eC5jCmluZGV4IDc1YmM2MTguLjljN2I1ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGMyMTE0eC5jCisrKyBiL2RyaXZlcnMvZGMyMTE0eC5jCkBAIC05OCw2ICs5OCwxNSBAQAogCiAjZGVmaW5lIFBPTExfREVNQU5ECTEKIAorI2lmZGVmIENPTkZJR19UVUxJUF9GSVhfREFWSUNPTQorI2RlZmluZSBSRVNFVF9ETTkxMDIoZGV2KSB7XAorICAgIHVuc2lnbmVkIGxvbmcgaTtcCisgICAgaT1JTkwoZGV2LCAweDApO1wKKyAgICB1ZGVsYXkoMTAwMCk7XAorICAgIE9VVEwoZGV2LCBpIHwgQk1SX1NXUiwgREU0WDVfQk1SKTtcCisgICAgdWRlbGF5KDEwMDApO1wKK30KKyNlbHNlCiAjZGVmaW5lIFJFU0VUX0RFNFg1KGRldikge1wKICAgICBpbnQgaTtcCiAgICAgaT1JTkwoZGV2LCBERTRYNV9CTVIpO1wKQEAgLTEwOSw2ICsxMTgsNyBAQAogICAgIGZvciAoaT0wO2k8NTtpKyspIHtJTkwoZGV2LCBERTRYNV9CTVIpOyB1ZGVsYXkoMTAwMDApO31cCiAgICAgdWRlbGF5KDEwMDApO1wKIH0KKyNlbmRpZgogCiAjZGVmaW5lIFNUQVJUX0RFNFg1KGRldikge1wKICAgICBzMzIgb21yOyBcCkBAIC0xMjUsNyArMTM1LDExIEBACiB9CiAKICNkZWZpbmUgTlVNX1JYX0RFU0MgUEtUQlVGU1JYCi0jZGVmaW5lIE5VTV9UWF9ERVNDIDEJCQkvKiBOdW1iZXIgb2YgVFggZGVzY3JpcHRvcnMgICAqLworI2lmbmRlZiBDT05GSUdfVFVMSVBfRklYX0RBVklDT00KKwkjZGVmaW5lIE5VTV9UWF9ERVNDIDEJCQkvKiBOdW1iZXIgb2YgVFggZGVzY3JpcHRvcnMgICAqLworI2Vsc2UKKwkjZGVmaW5lIE5VTV9UWF9ERVNDIDQKKyNlbmRpZgogI2RlZmluZSBSWF9CVUZGX1NaICBQS1RTSVpFX0FMSUdOCiAKICNkZWZpbmUgVE9VVF9MT09QICAgMTAwMDAwMApAQCAtMTMzLDcgKzE0Nyw2IEBACiAjZGVmaW5lIFNFVFVQX0ZSQU1FX0xFTiAxOTIKICNkZWZpbmUgRVRIX0FMRU4JNgogCi0KIHN0cnVjdCBkZTR4NV9kZXNjIHsKIAl2b2xhdGlsZSBzMzIgc3RhdHVzOwogCXUzMiBkZXMxOwpAQCAtMTQxLDggKzE1NCw4IEBACiAJdTMyIG5leHQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IGRlNHg1X2Rlc2MgcnhfcmluZ1tOVU1fUlhfREVTQ107IC8qIFJYIGRlc2NyaXB0b3IgcmluZyAgICAgICAgICovCi1zdGF0aWMgc3RydWN0IGRlNHg1X2Rlc2MgdHhfcmluZ1tOVU1fVFhfREVTQ107IC8qIFRYIGRlc2NyaXB0b3IgcmluZyAgICAgICAgICovCitzdGF0aWMgc3RydWN0IGRlNHg1X2Rlc2MgcnhfcmluZ1tOVU1fUlhfREVTQ10gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7IC8qIFJYIGRlc2NyaXB0b3IgcmluZyAgICAgICAgICovCitzdGF0aWMgc3RydWN0IGRlNHg1X2Rlc2MgdHhfcmluZ1tOVU1fVFhfREVTQ10gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7IC8qIFRYIGRlc2NyaXB0b3IgcmluZyAgICAgICAgICovCiBzdGF0aWMgaW50IHJ4X25ldzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJYIGRlc2NyaXB0b3IgcmluZyBwb2ludGVyICovCiBzdGF0aWMgaW50IHR4X25ldzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRYIGRlc2NyaXB0b3IgcmluZyBwb2ludGVyICovCiAKQEAgLTE4OCw2ICsyMDEsOSBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN1cHBvcnRlZFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9ERUMsIFBDSV9ERVZJQ0VfSURfREVDX1RVTElQX0ZBU1QgfSwKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ18yMTE0MiB9LAorI2lmZGVmIENPTkZJR19UVUxJUF9GSVhfREFWSUNPTQorCXsgUENJX1ZFTkRPUl9JRF9EQVZJQ09NLCBQQ0lfREVWSUNFX0lEX0RBVklDT01fRE05MTAyQSB9LAorI2VuZGlmCiAJeyB9CiB9OwogCkBAIC0yMTEsMTAgKzIyNywxMiBAQAogCQkvKiBHZXQgdGhlIGNoaXAgY29uZmlndXJhdGlvbiByZXZpc2lvbiByZWdpc3Rlci4gKi8KIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldmJ1c2ZuLCBQQ0lfUkVWSVNJT05fSUQsICZjZnJ2KTsKIAorI2lmbmRlZiBDT05GSUdfVFVMSVBfRklYX0RBVklDT00KIAkJaWYgKChjZnJ2ICYgQ0ZSVl9STikgPCBEQzIxMTR4X0JSSyApIHsKIAkJCXByaW50ZigiRXJyb3I6IFRoZSBjaGlwIGlzIG5vdCBEQzIxMTQzLlxuIik7CiAJCQljb250aW51ZTsKIAkJfQorI2VuZGlmCiAKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2YnVzZm4sIFBDSV9DT01NQU5ELCAmc3RhdHVzKTsKIAkJc3RhdHVzIHw9CkBAIC0yNjUsNyArMjgzLDEyIEBACiAKIAkJZGV2ID0gKHN0cnVjdCBldGhfZGV2aWNlKikgbWFsbG9jKHNpemVvZiAqZGV2KTsKIAotCQlzcHJpbnRmKGRldi0+bmFtZSwgImRjMjF4NHgjJWQiLCBjYXJkX251bWJlcik7CisjaWZkZWYgQ09ORklHX1RVTElQX0ZJWF9EQVZJQ09NCisgICAgICAgICAgICBzcHJpbnRmKGRldi0+bmFtZSwgIkRhdmljb20jJWQiLCBjYXJkX251bWJlcik7CisjZWxzZQorICAgICAgICAgICAgc3ByaW50ZihkZXYtPm5hbWUsICJkYzIxeDR4IyVkIiwgY2FyZF9udW1iZXIpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfVFVMSVBfVVNFX0lPCiAJCWRldi0+aW9iYXNlID0gcGNpX2lvX3RvX3BoeXMoZGV2YnVzZm4sIGlvYmFzZSk7CiAjZWxzZQpAQCAtMjgyLDggKzMwNSw5IEBACiAKIAkJdWRlbGF5KDEwICogMTAwMCk7CiAKLQkJcmVhZF9od19hZGRyKGRldiwgYmlzKTsKLQorI2lmbmRlZiBDT05GSUdfVFVMSVBfRklYX0RBVklDT00KKyAgICAgICAgcmVhZF9od19hZGRyKGRldiwgYmlzKTsKKyNlbmRpZgogCQlldGhfcmVnaXN0ZXIoZGV2KTsKIAogCQljYXJkX251bWJlcisrOwpAQCAtMzAwLDcgKzMyNCwxMSBAQAogCS8qIEVuc3VyZSB3ZSdyZSBub3Qgc2xlZXBpbmcuICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldmJ1c2ZuLCBQQ0lfQ0ZEQV9QU00sIFdBS0VVUCk7CiAKKyNpZmRlZiBDT05GSUdfVFVMSVBfRklYX0RBVklDT00KKwlSRVNFVF9ETTkxMDIoZGV2KTsKKyNlbHNlCiAJUkVTRVRfREU0WDUoZGV2KTsKKyNlbmRpZgogCiAJaWYgKChJTkwoZGV2LCBERTRYNV9TVFMpICYgKFNUU19UUyB8IFNUU19SUykpICE9IDApIHsKIAkJcHJpbnRmKCJFcnJvcjogQ2Fubm90IHJlc2V0IGV0aGVybmV0IGNvbnRyb2xsZXIuXG4iKTsKQEAgLTMxNywxNCArMzQ1LDIzIEBACiAJCXJ4X3JpbmdbaV0uc3RhdHVzID0gY3B1X3RvX2xlMzIoUl9PV04pOwogCQlyeF9yaW5nW2ldLmRlczEgPSBjcHVfdG9fbGUzMihSWF9CVUZGX1NaKTsKIAkJcnhfcmluZ1tpXS5idWYgPSBjcHVfdG9fbGUzMihwaHlzX3RvX2J1cygodTMyKSBOZXRSeFBhY2tldHNbaV0pKTsKKyNpZmRlZiBDT05GSUdfVFVMSVBfRklYX0RBVklDT00KKwkJcnhfcmluZ1tpXS5uZXh0ID0gY3B1X3RvX2xlMzIocGh5c190b19idXMoKHUzMikgJnJ4X3JpbmdbKGkrMSkgJSBOVU1fUlhfREVTQ10pKTsKKyNlbHNlCiAJCXJ4X3JpbmdbaV0ubmV4dCA9IDA7CisjZW5kaWYKIAl9CiAKIAlmb3IgKGk9MDsgaSA8IE5VTV9UWF9ERVNDOyBpKyspIHsKIAkJdHhfcmluZ1tpXS5zdGF0dXMgPSAwOwogCQl0eF9yaW5nW2ldLmRlczEgPSAwOwogCQl0eF9yaW5nW2ldLmJ1ZiA9IDA7CisKKyNpZmRlZiBDT05GSUdfVFVMSVBfRklYX0RBVklDT00KKyAgICAgICAgdHhfcmluZ1tpXS5uZXh0ID0gY3B1X3RvX2xlMzIocGh5c190b19idXMoKHUzMikgJnR4X3JpbmdbKGkrMSkgJSBOVU1fVFhfREVTQ10pKTsKKyNlbHNlCiAJCXR4X3JpbmdbaV0ubmV4dCA9IDA7CisjZW5kaWYKIAl9CiAKIAlyeFJpbmdTaXplID0gTlVNX1JYX0RFU0M7CkBAIC0zODMsMTIgKzQyMCwxNCBAQAogCQlwcmludGYoIlRYIGVycm9yIHN0YXR1cyA9IDB4JTA4WFxuIiwKIAkJICAgICAgIGxlMzJfdG9fY3B1KHR4X3JpbmdbdHhfbmV3XS5zdGF0dXMpKTsKICNlbmRpZgorCQl0eF9yaW5nW3R4X25ld10uc3RhdHVzID0gMHgwOwogCQlnb3RvIERvbmU7CiAJfQogCiAJc3RhdHVzID0gbGVuZ3RoOwogCiAgRG9uZToKKyAgICB0eF9uZXcgPSAodHhfbmV3KzEpICUgTlVNX1RYX0RFU0M7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDg1LDYgKzUyNCw4IEBACiAJaWYgKGxlMzJfdG9fY3B1KHR4X3JpbmdbdHhfbmV3XS5zdGF0dXMpICE9IDB4N0ZGRkZGRkYpIHsKIAkJcHJpbnRmKCJUWCBlcnJvciBzdGF0dXMyID0gMHglMDhYXG4iLCBsZTMyX3RvX2NwdSh0eF9yaW5nW3R4X25ld10uc3RhdHVzKSk7CiAJfQorCXR4X25ldyA9ICh0eF9uZXcrMSkgJSBOVU1fVFhfREVTQzsKKwogRG9uZToKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0bDgxMzkuYyBiL2RyaXZlcnMvcnRsODEzOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTRlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0bDgxMzkuYwpAQCAtMCwwICsxLDUzOSBAQAorLyoKKyAqIHJ0bDgxMzkuYyA6IFUtQm9vdCBkcml2ZXIgZm9yIHRoZSBSZWFsVGVrIFJUTDgxMzkKKyAqCisgKiBNYXNhbWkgS29taXlhIChta29taXlhQHNvbmFyZS5pdCkKKyAqCisgKiBNb3N0IHBhcnQgaXMgdGFrZW4gZnJvbSBydGw4MTM5LmMgb2YgZXRoZXJib290CisgKgorICovCisKKy8qIHJ0bDgxMzkuYyAtIGV0aGVyYm9vdCBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIDgxMzkgY2hpcHNldAorCisgIHBvcnRlZCBmcm9tIHRoZSBsaW51eCBkcml2ZXIgd3JpdHRlbiBieSBEb25hbGQgQmVja2VyCisgIGJ5IFJhaW5lciBCYXdpZGFtYW5uIChSYWluZXIuQmF3aWRhbWFubkBpbmZvcm1hdGlrLnVuaS11bG0uZGUpIDE5OTkKKworICBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisgIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCisgIGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIGRyaXZlcjoKKyAgLSByZW1vdmVkIHN1cHBvcnQgZm9yIGludGVycnVwdHMsIHN3aXRjaGluZyB0byBwb2xsaW5nIG1vZGUgKHl1Y2shKQorICAtIHJlbW92ZWQgc3VwcG9ydCBmb3IgdGhlIDgxMjkgY2hpcCAoZXh0ZXJuYWwgTUlJKQorCisqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUmV2aXNpb24gSGlzdG9yeQkJCQkJCSAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgIDI4IERlYyAyMDAyCWtlbl95YXBAdXNlcnMuc291cmNlZm9yZ2UubmV0IChLZW4gWWFwKQorICAgICBQdXQgaW4gdmlydF90b19idXMgY2FsbHMgdG8gYWxsb3cgRXRoZXJib290IHJlbG9jYXRpb24uCisKKyAgMDYgQXByIDIwMDEJa2VuX3lhcEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQgKEtlbiBZYXApCisgICAgIEZvbGxvd2luZyBlbWFpbCBmcm9tIEh5dW4tSm9vbiBDaGEsIGFkZGVkIGEgZGlzYWJsZSByb3V0aW5lLCBvdGhlcndpc2UKKyAgICAgTklDIHJlbWFpbnMgbGl2ZSBhbmQgY2FuIGNyYXNoIHRoZSBrZXJuZWwgbGF0ZXIuCisKKyAgNCBGZWIgMjAwMAllc3BlbmxhdWJAaW5mb3JtYXRpay51bmktdWxtLmRlIChLbGF1cyBFc3BlbmxhdWIpCisgICAgIFNodWZmbGVkIHRoaW5ncyBhcm91bmQsIHJlbW92ZWQgdGhlIGxlZnRvdmVycyBmcm9tIHRoZSA4MTI5IHN1cHBvcnQKKyAgICAgdGhhdCB3YXMgaW4gdGhlIExpbnV4IGRyaXZlciBhbmQgYWRkZWQgYSBiaXQgbW9yZSA4MTM5IGRlZmluaXRpb25zLgorICAgICBNb3ZlZCB0aGUgOEsgcmVjZWl2ZSBidWZmZXIgdG8gYSBmaXhlZCwgYXZhaWxhYmxlIGFkZHJlc3Mgb3V0c2lkZSB0aGUKKyAgICAgMHg5ODAwMC0weDlmZmZmIHJhbmdlLiAgVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCBjdXJyZW50bHkgdGhlIG9ubHkKKyAgICAgd2F5IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIEV0aGVyYm9vdCBmZWF0dXJlcyB0aGF0IG5lZWQgc3Vic3RhbnRpYWwgYW1vdW50cworICAgICBvZiBjb2RlIGxpa2UgdGhlIEFOU0kgY29uc29sZSBzdXBwb3J0LiAgQ3VycmVudGx5IHRoZSBidWZmZXIgaXMganVzdCBiZWxvdworICAgICAweDEwMDAwLCBzbyB0aGlzIGV2ZW4gY29uZm9ybXMgdG8gdGhlIHRhZ2dlZCBib290IGltYWdlIHNwZWNpZmljYXRpb24sCisgICAgIHdoaWNoIHJlc2VydmVzIHRoZSByYW5nZXMgMHgwMDAwMC0weDEwMDAwIGFuZCAweDk4MDAwLTB4QTAwMDAuICBNeQorICAgICBpbnRlcnByZXRhdGlvbiBvZiB0aGlzICJyZXNlcnZlZCIgaXMgdGhhdCBFdGhlcmJvb3QgbWF5IGRvIHdoYXRldmVyIGl0CisgICAgIGxpa2VzLCBhcyBsb25nIGFzIGl0cyBlbnZpcm9ubWVudCBpcyBrZXB0IGludGFjdCAobGlrZSB0aGUgQklPUworICAgICB2YXJpYWJsZXMpLiAgSG9wZWZ1bGx5IGZpeGVkIHJ0bF9wb2xsKCkgb25jZSBhbmQgZm9yIGFsbC4gIFRoZSBzeW1wdG9tcworICAgICB3ZXJlIHRoYXQgaWYgRXRoZXJib290IHdhcyBsZWZ0IGF0IHRoZSBib290IG1lbnUgZm9yIHNldmVyYWwgbWludXRlcywgdGhlCisgICAgIGZpcnN0IGV0aF9wb2xsIGZhaWxlZC4gIFNlZW1zIGxpa2UgSSBhbSB0aGUgb25seSBwZXJzb24gd2hvIGRvZXMgdGhpcy4KKyAgICAgRmlyc3Qgb2YgYWxsIEkgZml4ZWQgdGhlIGRlYnVnZ2luZyBjb2RlIGFuZCB0aGVuIHNldCBvdXQgZm9yIGEgbG9uZyBidWcKKyAgICAgaHVudGluZyBzZXNzaW9uLiAgSXQgdG9vayBtZSBhYm91dCBhIHdlZWsgZnVsbCB0aW1lIHdvcmsgLSBwb2tpbmcgYXJvdW5kCisgICAgIHZhcmlvdXMgcGxhY2VzIGluIHRoZSBkcml2ZXIsIHJlYWRpbmcgRG9uIEJlY2tlcidzIGFuZCBKZWZmIEdhcnppaydzIExpbnV4CisgICAgIGRyaXZlciBhbmQgZXZlbiB0aGUgRnJlZUJTRCBkcml2ZXIgKHdoYXQgYSBwaWVjZSBvZiBjcmFwISkgLSBhbmQKKyAgICAgZXZlbnR1YWxseSBzcG90dGVkIHRoZSBuYXN0eSB0aGluZzogdGhlIHRyYW5zbWl0IHJvdXRpbmUgd2FzIGFja25vd2xlZGdpbmcKKyAgICAgZWFjaCBhbmQgZXZlcnkgaW50ZXJydXB0IHBlbmRpbmcsIGluY2x1ZGluZyB0aGUgUnhPdmVycnVuIGFuZCBSeEZJRklPdmVyCisgICAgIGludGVycnVwdHMuICBUaGlzIGNvbmZ1c2VkIHRoZSBSVEw4MTM5IHRob3JvdWdobHkuICBJdCBkZXN0cm95ZWQgdGhlCisgICAgIFJ4IHJpbmcgY29udGVudHMgYnkgZHVtcGluZyB0aGUgMksgRklGTyBjb250ZW50cyByaWdodCB3aGVyZSB3ZSB3YW50ZWQgdG8KKyAgICAgZ2V0IHRoZSBuZXh0IHBhY2tldC4gIE9oIHdlbGwsIHdoYXQgZnVuLgorCisgIDE4IEphbiAyMDAwICAgbWRjQHRoaW5ndWluLm9yZyAoTWFydHkgQ29ubm9yKQorICAgICBEcmFzdGljYWxseSBzaW1wbGlmaWVkIGVycm9yIGhhbmRsaW5nLiAgQmFzaWNhbGx5LCBpZiBhbnkgZXJyb3IKKyAgICAgaW4gdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbiBvY2N1cnMsIHRoZSBjYXJkIGlzIHJlc2V0LgorICAgICBBbHNvLCBwb2ludGVkIGFsbCB0cmFuc21pdCBkZXNjcmlwdG9ycyB0byB0aGUgc2FtZSBidWZmZXIgdG8KKyAgICAgc2F2ZSBidWZmZXIgc3BhY2UuICBUaGlzIHNob3VsZCBkZWNyZWFzZSBkcml2ZXIgc2l6ZSBhbmQgYXZvaWQKKyAgICAgY29ycnVwdGlvbiBiZWNhdXNlIG9mIGV4Y2VlZGluZyAzMksgZHVyaW5nIHJ1bnRpbWUuCisKKyAgMjggSnVsIDE5OTkgICAoTWF0dGhpYXMgTWVpeG5lciAtIG1laXhuZXJAcmJnLmluZm9ybWF0aWsudHUtZGFybXN0YWR0LmRlKQorICAgICBydGxfcG9sbCB3YXMgcXVpdGUgYnJva2VuOiBpdCB1c2VkIHRoZSBSeE9LIGludGVycnVwdCBmbGFnIGluc3RlYWQKKyAgICAgb2YgdGhlIFJ4QnVmZmVyRW1wdHkgZmxhZyB3aGljaCBvZnRlbiByZXN1bHRlZCBpbiB2ZXJ5IGJhZAorICAgICB0cmFuc21pc3Npb24gcGVyZm9ybWFjZSAtIGJlbG93IDFrQnl0ZXMvcy4KKworKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPHBjaS5oPgorCisjaWZkZWYgX19NSVBTX18KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1pcHNfaW9fcG9ydF9iYXNlID0gMDsKKyNlbmRpZgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkVUKSAmJiBkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpICYmIFwKKwlkZWZpbmVkKENPTkZJR19SVEw4MTM5KQorCisjZGVmaW5lIFRJQ0tTX1BFUl9TRUMJQ0ZHX0haCisjZGVmaW5lIFRJQ0tTX1BFUl9NUwkoVElDS1NfUEVSX1NFQy8xMDAwKQorCisjZGVmaW5lIFJUTF9USU1FT1VUCSgxKlRJQ0tTX1BFUl9TRUMpCisKKyNkZWZpbmUgRVRIX0ZSQU1FX0xFTgkJMTUxNAorI2RlZmluZSBFVEhfQUxFTgkJNgorI2RlZmluZSBFVEhfWkxFTgkJNjAKKworLyogUENJIFR1bmluZyBQYXJhbWV0ZXJzCisgICBUaHJlc2hvbGQgaXMgYnl0ZXMgdHJhbnNmZXJyZWQgdG8gY2hpcCBiZWZvcmUgdHJhbnNtaXNzaW9uIHN0YXJ0cy4gKi8KKyNkZWZpbmUgVFhfRklGT19USFJFU0ggMjU2ICAgICAgLyogSW4gYnl0ZXMsIHJvdW5kZWQgZG93biB0byAzMiBieXRlIHVuaXRzLiAqLworI2RlZmluZSBSWF9GSUZPX1RIUkVTSCAgNCAgICAgICAvKiBSeCBidWZmZXIgbGV2ZWwgYmVmb3JlIGZpcnN0IFBDSSB4ZmVyLiAgKi8KKyNkZWZpbmUgUlhfRE1BX0JVUlNUICAgIDQgICAgICAgLyogTWF4aW11bSBQQ0kgYnVyc3QsICc0JyBpcyAyNTYgYnl0ZXMgKi8KKyNkZWZpbmUgVFhfRE1BX0JVUlNUICAgIDQgICAgICAgLyogQ2FsY3VsYXRlIGFzIDE2PDx2YWwuICovCisjZGVmaW5lIE5VTV9UWF9ERVNDICAgICA0ICAgICAgIC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgVFhfQlVGX1NJWkUJRVRIX0ZSQU1FX0xFTgkvKiBGQ1MgaXMgYWRkZWQgYnkgdGhlIGNoaXAgKi8KKyNkZWZpbmUgUlhfQlVGX0xFTl9JRFggMAkvKiAwLCAxLCAyIGlzIGFsbG93ZWQgLSA4LDE2LDMySyByeCBidWZmZXIgKi8KKyNkZWZpbmUgUlhfQlVGX0xFTiAoODE5MiA8PCBSWF9CVUZfTEVOX0lEWCkKKworI3VuZGVmIERFQlVHX1RYCisjdW5kZWYgREVCVUdfUlgKKworI2RlZmluZSBjdXJydGlja3MoKQlnZXRfdGltZXIoMCkKKyNkZWZpbmUgYnVzX3RvX3BoeXMoYSkgIHBjaV9tZW1fdG9fcGh5cygocGNpX2Rldl90KWRldi0+cHJpdiwgYSkKKyNkZWZpbmUgcGh5c190b19idXMoYSkgIHBjaV9waHlzX3RvX21lbSgocGNpX2Rldl90KWRldi0+cHJpdiwgYSkKKworLyogU3ltYm9saWMgb2Zmc2V0cyB0byByZWdpc3RlcnMuICovCitlbnVtIFJUTDgxMzlfcmVnaXN0ZXJzIHsKKwlNQUMwPTAsCQkJLyogRXRoZXJuZXQgaGFyZHdhcmUgYWRkcmVzcy4gKi8KKwlNQVIwPTgsCQkJLyogTXVsdGljYXN0IGZpbHRlci4gKi8KKwlUeFN0YXR1czA9MHgxMCwJCS8qIFRyYW5zbWl0IHN0YXR1cyAoZm91ciAzMmJpdCByZWdpc3RlcnMpLiAqLworCVR4QWRkcjA9MHgyMCwJCS8qIFR4IGRlc2NyaXB0b3JzIChhbHNvIGZvdXIgMzJiaXQpLiAqLworCVJ4QnVmPTB4MzAsIFJ4RWFybHlDbnQ9MHgzNCwgUnhFYXJseVN0YXR1cz0weDM2LAorCUNoaXBDbWQ9MHgzNywgUnhCdWZQdHI9MHgzOCwgUnhCdWZBZGRyPTB4M0EsCisJSW50ck1hc2s9MHgzQywgSW50clN0YXR1cz0weDNFLAorCVR4Q29uZmlnPTB4NDAsIFJ4Q29uZmlnPTB4NDQsCisJVGltZXI9MHg0OCwJCS8qIGdlbmVyYWwtcHVycG9zZSBjb3VudGVyLiAqLworCVJ4TWlzc2VkPTB4NEMsCQkvKiAyNCBiaXRzIHZhbGlkLCB3cml0ZSBjbGVhcnMuICovCisJQ2ZnOTM0Nj0weDUwLCBDb25maWcwPTB4NTEsIENvbmZpZzE9MHg1MiwKKwlUaW1lckludHJSZWc9MHg1NCwJLyogaW50ciBpZiBncCBjb3VudGVyIHJlYWNoZXMgdGhpcyB2YWx1ZSAqLworCU1lZGlhU3RhdHVzPTB4NTgsCisJQ29uZmlnMz0weDU5LAorCU11bHRpSW50cj0weDVDLAorCVJldmlzaW9uSUQ9MHg1RSwJLyogcmV2aXNpb24gb2YgdGhlIFJUTDgxMzkgY2hpcCAqLworCVR4U3VtbWFyeT0weDYwLAorCU1JSV9CTUNSPTB4NjIsIE1JSV9CTVNSPTB4NjQsIE5XYXlBZHZlcnQ9MHg2NiwgTldheUxQQVI9MHg2OCwKKwlOV2F5RXhwYW5zaW9uPTB4NkEsCisJRGlzY29ubmVjdENudD0weDZDLCBGYWxzZUNhcnJpZXJDbnQ9MHg2RSwKKwlOV2F5VGVzdFJlZz0weDcwLAorCVJ4Q250PTB4NzIsCQkvKiBwYWNrZXQgcmVjZWl2ZWQgY291bnRlciAqLworCUNTQ1I9MHg3NCwJCS8qIGNoaXAgc3RhdHVzIGFuZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJUGh5UGFybTE9MHg3OCxUd2lzdGVyUGFybT0weDdjLFBoeVBhcm0yPTB4ODAsCS8qIHVuZG9jdW1lbnRlZCAqLworCS8qIGZyb20gMHg4NCBvbndhcmRzIGFyZSBhIG51bWJlciBvZiBwb3dlciBtYW5hZ2VtZW50L3dha2V1cCBmcmFtZQorCSAqIGRlZmluaXRpb25zIHdlIHdpbGwgcHJvYmFibHkgbmV2ZXIgbmVlZCB0byBrbm93IGFib3V0LiAgKi8KK307CisKK2VudW0gQ2hpcENtZEJpdHMgeworCUNtZFJlc2V0PTB4MTAsIENtZFJ4RW5iPTB4MDgsIENtZFR4RW5iPTB4MDQsIFJ4QnVmRW1wdHk9MHgwMSwgfTsKKworLyogSW50ZXJydXB0IHJlZ2lzdGVyIGJpdHMsIHVzaW5nIG15IG93biBtZWFuaW5nZnVsIG5hbWVzLiAqLworZW51bSBJbnRyU3RhdHVzQml0cyB7CisJUENJRXJyPTB4ODAwMCwgUENTVGltZW91dD0weDQwMDAsIENhYmxlTGVuQ2hhbmdlPSAweDIwMDAsCisJUnhGSUZPT3Zlcj0weDQwLCBSeFVuZGVycnVuPTB4MjAsIFJ4T3ZlcmZsb3c9MHgxMCwKKwlUeEVycj0weDA4LCBUeE9LPTB4MDQsIFJ4RXJyPTB4MDIsIFJ4T0s9MHgwMSwKK307CitlbnVtIFR4U3RhdHVzQml0cyB7CisJVHhIb3N0T3ducz0weDIwMDAsIFR4VW5kZXJydW49MHg0MDAwLCBUeFN0YXRPSz0weDgwMDAsCisJVHhPdXRPZldpbmRvdz0weDIwMDAwMDAwLCBUeEFib3J0ZWQ9MHg0MDAwMDAwMCwKKwlUeENhcnJpZXJMb3N0PTB4ODAwMDAwMDAsCit9OworZW51bSBSeFN0YXR1c0JpdHMgeworCVJ4TXVsdGljYXN0PTB4ODAwMCwgUnhQaHlzaWNhbD0weDQwMDAsIFJ4QnJvYWRjYXN0PTB4MjAwMCwKKwlSeEJhZFN5bWJvbD0weDAwMjAsIFJ4UnVudD0weDAwMTAsIFJ4VG9vTG9uZz0weDAwMDgsIFJ4Q1JDRXJyPTB4MDAwNCwKKwlSeEJhZEFsaWduPTB4MDAwMiwgUnhTdGF0dXNPSz0weDAwMDEsCit9OworCitlbnVtIE1lZGlhU3RhdHVzQml0cyB7CisJTVNSVHhGbG93RW5hYmxlPTB4ODAsIE1TUlJ4Rmxvd0VuYWJsZT0weDQwLCBNU1JTcGVlZDEwPTB4MDgsCisJTVNSTGlua0ZhaWw9MHgwNCwgTVNSUnhQYXVzZUZsYWc9MHgwMiwgTVNSVHhQYXVzZUZsYWc9MHgwMSwKK307CisKK2VudW0gTUlJQk1DUkJpdHMgeworCUJNQ1JSZXNldD0weDgwMDAsIEJNQ1JTcGVlZDEwMD0weDIwMDAsIEJNQ1JOV2F5RW5hYmxlPTB4MTAwMCwKKwlCTUNSUmVzdGFydE5XYXk9MHgwMjAwLCBCTUNSRHVwbGV4PTB4MDEwMCwKK307CisKK2VudW0gQ1NDUkJpdHMgeworCUNTQ1JfTGlua09LQml0PTB4MDQwMCwgQ1NDUl9MaW5rQ2hhbmdlQml0PTB4MDgwMCwKKwlDU0NSX0xpbmtTdGF0dXNCaXRzPTB4MGYwMDAsIENTQ1JfTGlua0Rvd25PZmZDbWQ9MHgwMDNjMCwKKwlDU0NSX0xpbmtEb3duQ21kPTB4MGYzYzAsCit9OworCisvKiBCaXRzIGluIFJ4Q29uZmlnLiAqLworZW51bSByeF9tb2RlX2JpdHMgeworCVJ4Q2ZnV3JhcD0weDgwLAorCUFjY2VwdEVycj0weDIwLCBBY2NlcHRSdW50PTB4MTAsIEFjY2VwdEJyb2FkY2FzdD0weDA4LAorCUFjY2VwdE11bHRpY2FzdD0weDA0LCBBY2NlcHRNeVBoeXM9MHgwMiwgQWNjZXB0QWxsUGh5cz0weDAxLAorfTsKKworc3RhdGljIGludCBpb2FkZHI7CitzdGF0aWMgdW5zaWduZWQgaW50IGN1cl9yeCxjdXJfdHg7CisKKy8qIFRoZSBSVEw4MTM5IGNhbiBvbmx5IHRyYW5zbWl0IGZyb20gYSBjb250aWd1b3VzLCBhbGlnbmVkIG1lbW9yeSBibG9jay4gICovCitzdGF0aWMgdW5zaWduZWQgY2hhciB0eF9idWZmZXJbVFhfQlVGX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHJ4X3JpbmdbUlhfQlVGX0xFTisxNl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpOworCitzdGF0aWMgaW50IHJ0bDgxMzlfcHJvYmUoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwgYmRfdCAqYmlzKTsKK3N0YXRpYyBpbnQgcmVhZF9lZXByb20oaW50IGxvY2F0aW9uLCBpbnQgYWRkcl9sZW4pOworc3RhdGljIHZvaWQgcnRsX3Jlc2V0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBydGxfdHJhbnNtaXQoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwgdm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKTsKK3N0YXRpYyBpbnQgcnRsX3BvbGwoc3RydWN0IGV0aF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBydGxfZGlzYWJsZShzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN1cHBvcnRlZFtdID0geworICAgICAgIHtQQ0lfVkVORE9SX0lEX1JFQUxURUssIFBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTM5fSwKKyAgICAgICB7fQorfTsKKworaW50IHJ0bDgxMzlfaW5pdGlhbGl6ZShiZF90ICpiaXMpCit7CisJcGNpX2Rldl90IGRldm5vOworCWludCBjYXJkX251bWJlciA9IDA7CisJc3RydWN0IGV0aF9kZXZpY2UgKmRldjsKKwl1MzIgaW9iYXNlOworCWludCBpZHg9MDsKKworCXdoaWxlKDEpeworCQkvKiBGaW5kIFJUTDgxMzkgKi8KKwkJaWYgKChkZXZubyA9IHBjaV9maW5kX2RldmljZXMoc3VwcG9ydGVkLCBpZHgrKykpIDwgMCkKKwkJCWJyZWFrOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZubywgUENJX0JBU0VfQUREUkVTU18xLCAmaW9iYXNlKTsKKwkJaW9iYXNlICY9IH4weGY7CisKKwkJZGVidWcgKCJydGw4MTM5OiBSRUFMVEVLIFJUTDgxMzkgQDB4JXhcbiIsIGlvYmFzZSk7CisKKwkJZGV2ID0gKHN0cnVjdCBldGhfZGV2aWNlICopbWFsbG9jKHNpemVvZiAqZGV2KTsKKworCQlzcHJpbnRmIChkZXYtPm5hbWUsICJSVEw4MTM5IyVkIiwgY2FyZF9udW1iZXIpOworCisJCWRldi0+cHJpdiA9ICh2b2lkICopIGRldm5vOworCQlkZXYtPmlvYmFzZSA9IChpbnQpYnVzX3RvX3BoeXMoaW9iYXNlKTsKKwkJZGV2LT5pbml0ID0gcnRsODEzOV9wcm9iZTsKKwkJZGV2LT5oYWx0ID0gcnRsX2Rpc2FibGU7CisJCWRldi0+c2VuZCA9IHJ0bF90cmFuc21pdDsKKwkJZGV2LT5yZWN2ID0gcnRsX3BvbGw7CisKKwkJZXRoX3JlZ2lzdGVyIChkZXYpOworCisJCWNhcmRfbnVtYmVyKys7CisKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChkZXZubywgUENJX0xBVEVOQ1lfVElNRVIsIDB4MjApOworCisJCXVkZWxheSAoMTAgKiAxMDAwKTsKKwl9CisKKwlyZXR1cm4gY2FyZF9udW1iZXI7Cit9CisKK3N0YXRpYyBpbnQgcnRsODEzOV9wcm9iZShzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LCBiZF90ICpiaXMpCit7CisJaW50IGk7CisJaW50IHNwZWVkMTAsIGZ1bGxkdXBsZXg7CisJaW50IGFkZHJfbGVuOworCXVuc2lnbmVkIHNob3J0ICphcCA9ICh1bnNpZ25lZCBzaG9ydCAqKWRldi0+ZW5ldGFkZHI7CisKKwlpb2FkZHIgPSBkZXYtPmlvYmFzZTsKKworCS8qIEJyaW5nIHRoZSBjaGlwIG91dCBvZiBsb3ctcG93ZXIgbW9kZS4gKi8KKwlvdXRiKDB4MDAsIGlvYWRkciArIENvbmZpZzEpOworCisJYWRkcl9sZW4gPSByZWFkX2VlcHJvbSgwLDgpID09IDB4ODEyOSA/IDggOiA2OworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCSphcCsrID0gcmVhZF9lZXByb20oaSArIDcsIGFkZHJfbGVuKTsKKworCXNwZWVkMTAgPSBpbmIoaW9hZGRyICsgTWVkaWFTdGF0dXMpICYgTVNSU3BlZWQxMDsKKwlmdWxsZHVwbGV4ID0gaW53KGlvYWRkciArIE1JSV9CTUNSKSAmIEJNQ1JEdXBsZXg7CisKKwlydGxfcmVzZXQoZGV2KTsKKworCWlmIChpbmIoaW9hZGRyICsgTWVkaWFTdGF0dXMpICYgTVNSTGlua0ZhaWwpIHsKKwkJcHJpbnRmKCJDYWJsZSBub3QgY29ubmVjdGVkIG9yIG90aGVyIGxpbmsgZmFpbHVyZVxuIik7CisJCXJldHVybigwKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyogU2VyaWFsIEVFUFJPTSBzZWN0aW9uLiAqLworCisvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KKyNkZWZpbmUgRUVfU0hJRlRfQ0xLICAgIDB4MDQgICAgLyogRUVQUk9NIHNoaWZ0IGNsb2NrLiAqLworI2RlZmluZSBFRV9DUwkJMHgwOCAgICAvKiBFRVBST00gY2hpcCBzZWxlY3QuICovCisjZGVmaW5lIEVFX0RBVEFfV1JJVEUgICAweDAyICAgIC8qIEVFUFJPTSBjaGlwIGRhdGEgaW4uICovCisjZGVmaW5lIEVFX1dSSVRFXzAgICAgICAweDAwCisjZGVmaW5lIEVFX1dSSVRFXzEgICAgICAweDAyCisjZGVmaW5lIEVFX0RBVEFfUkVBRCAgICAweDAxICAgIC8qIEVFUFJPTSBjaGlwIGRhdGEgb3V0LiAqLworI2RlZmluZSBFRV9FTkIJCSgweDgwIHwgRUVfQ1MpCisKKy8qCisJRGVsYXkgYmV0d2VlbiBFRVBST00gY2xvY2sgdHJhbnNpdGlvbnMuCisJTm8gZXh0cmEgZGVsYXkgaXMgbmVlZGVkIHdpdGggMzNNaHogUENJLCBidXQgNjZNaHogbWF5IGNoYW5nZSB0aGlzLgorKi8KKworI2RlZmluZSBlZXByb21fZGVsYXkoKSAgaW5sKGVlX2FkZHIpCisKKy8qIFRoZSBFRVBST00gY29tbWFuZHMgaW5jbHVkZSB0aGUgYWx3YXktc2V0IGxlYWRpbmcgYml0LiAqLworI2RlZmluZSBFRV9XUklURV9DTUQgICAgKDUpCisjZGVmaW5lIEVFX1JFQURfQ01EICAgICAoNikKKyNkZWZpbmUgRUVfRVJBU0VfQ01EICAgICg3KQorCitzdGF0aWMgaW50IHJlYWRfZWVwcm9tKGludCBsb2NhdGlvbiwgaW50IGFkZHJfbGVuKQoreworCWludCBpOworCXVuc2lnbmVkIGludCByZXR2YWwgPSAwOworCWxvbmcgZWVfYWRkciA9IGlvYWRkciArIENmZzkzNDY7CisJaW50IHJlYWRfY21kID0gbG9jYXRpb24gfCAoRUVfUkVBRF9DTUQgPDwgYWRkcl9sZW4pOworCisJb3V0YihFRV9FTkIgJiB+RUVfQ1MsIGVlX2FkZHIpOworCW91dGIoRUVfRU5CLCBlZV9hZGRyKTsKKwllZXByb21fZGVsYXkoKTsKKworCS8qIFNoaWZ0IHRoZSByZWFkIGNvbW1hbmQgYml0cyBvdXQuICovCisJZm9yIChpID0gNCArIGFkZHJfbGVuOyBpID49IDA7IGktLSkgeworCQlpbnQgZGF0YXZhbCA9IChyZWFkX2NtZCAmICgxIDw8IGkpKSA/IEVFX0RBVEFfV1JJVEUgOiAwOworCQlvdXRiKEVFX0VOQiB8IGRhdGF2YWwsIGVlX2FkZHIpOworCQllZXByb21fZGVsYXkoKTsKKwkJb3V0YihFRV9FTkIgfCBkYXRhdmFsIHwgRUVfU0hJRlRfQ0xLLCBlZV9hZGRyKTsKKwkJZWVwcm9tX2RlbGF5KCk7CisJfQorCW91dGIoRUVfRU5CLCBlZV9hZGRyKTsKKwllZXByb21fZGVsYXkoKTsKKworCWZvciAoaSA9IDE2OyBpID4gMDsgaS0tKSB7CisJCW91dGIoRUVfRU5CIHwgRUVfU0hJRlRfQ0xLLCBlZV9hZGRyKTsKKwkJZWVwcm9tX2RlbGF5KCk7CisJCXJldHZhbCA9IChyZXR2YWwgPDwgMSkgfCAoKGluYihlZV9hZGRyKSAmIEVFX0RBVEFfUkVBRCkgPyAxIDogMCk7CisJCW91dGIoRUVfRU5CLCBlZV9hZGRyKTsKKwkJZWVwcm9tX2RlbGF5KCk7CisJfQorCisJLyogVGVybWluYXRlIHRoZSBFRVBST00gYWNjZXNzLiAqLworCW91dGIofkVFX0NTLCBlZV9hZGRyKTsKKwllZXByb21fZGVsYXkoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ0bDgxMzlfcnhfY29uZmlnID0KKwkoUlhfQlVGX0xFTl9JRFggPDwgMTEpIHwKKwkoUlhfRklGT19USFJFU0ggPDwgMTMpIHwKKwkoUlhfRE1BX0JVUlNUIDw8IDgpOworCitzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KSB7CisJdW5zaWduZWQgaW50IG1jX2ZpbHRlclsyXTsKKwlpbnQgcnhfbW9kZTsKKwkvKiAhSUZGX1BST01JU0MgKi8KKwlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOworCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDB4ZmZmZmZmZmY7CisKKwlvdXRsKHJ0bDgxMzlfcnhfY29uZmlnIHwgcnhfbW9kZSwgaW9hZGRyICsgUnhDb25maWcpOworCisJb3V0bChtY19maWx0ZXJbMF0sIGlvYWRkciArIE1BUjAgKyAwKTsKKwlvdXRsKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgTUFSMCArIDQpOworfQorCitzdGF0aWMgdm9pZCBydGxfcmVzZXQoc3RydWN0IGV0aF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKworCW91dGIoQ21kUmVzZXQsIGlvYWRkciArIENoaXBDbWQpOworCisJY3VyX3J4ID0gMDsKKwljdXJfdHggPSAwOworCisJLyogR2l2ZSB0aGUgY2hpcCAxMG1zIHRvIGZpbmlzaCB0aGUgcmVzZXQuICovCisJZm9yIChpPTA7IGk8MTAwOyArK2kpeworCQlpZiAoKGluYihpb2FkZHIgKyBDaGlwQ21kKSAmIENtZFJlc2V0KSA9PSAwKSBicmVhazsKKwkJdWRlbGF5ICgxMDApOyAvKiB3YWl0IDEwMHVzICovCisJfQorCisKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJb3V0YihkZXYtPmVuZXRhZGRyW2ldLCBpb2FkZHIgKyBNQUMwICsgaSk7CisKKwkvKiBNdXN0IGVuYWJsZSBUeC9SeCBiZWZvcmUgc2V0dGluZyB0cmFuc2ZlciB0aHJlc2hvbGRzISAqLworCW91dGIoQ21kUnhFbmIgfCBDbWRUeEVuYiwgaW9hZGRyICsgQ2hpcENtZCk7CisJb3V0bCgoUlhfRklGT19USFJFU0g8PDEzKSB8IChSWF9CVUZfTEVOX0lEWDw8MTEpIHwgKFJYX0RNQV9CVVJTVDw8OCksCisJCWlvYWRkciArIFJ4Q29uZmlnKTsJCS8qIGFjY2VwdCBubyBmcmFtZXMgeWV0ISAgKi8KKwlvdXRsKChUWF9ETUFfQlVSU1Q8PDgpfDB4MDMwMDAwMDAsIGlvYWRkciArIFR4Q29uZmlnKTsKKworCS8qIFRoZSBMaW51eCBkcml2ZXIgY2hhbmdlcyBDb25maWcxIGhlcmUgdG8gdXNlIGEgZGlmZmVyZW50IExFRCBwYXR0ZXJuCisJICogZm9yIGhhbGYgZHVwbGV4IG9yIGZ1bGwvYXV0b2RldGVjdCBkdXBsZXggKGZvciBmdWxsL2F1dG9kZXRlY3QsIHRoZQorCSAqIG91dHB1dHMgYXJlIFRYL1JYLCBMaW5rMTAvMTAwLCBGVUxMLCB3aGlsZSBmb3IgaGFsZiBkdXBsZXggaXQgdXNlcworCSAqIFRYL1JYLCBMaW5rMTAwLCBMaW5rMTApLiAgVGhpcyBpcyBtZXNzeSwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdGNoCisJICogdGhlIGluc2NyaXB0aW9uIG9uIHRoZSBtb3VudGluZyBicmFja2V0LiAgSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkCisJICogZnJvbSB0aGUgY29uZmlndXJhdGlvbiBFRVBST00gZGVmYXVsdCwgYmVjYXVzZSB0aGUgY2FyZCBtYW51ZmFjdHVyZXIKKwkgKiBzaG91bGQgaGF2ZSBzZXQgdGhhdCB0byBtYXRjaCB0aGUgY2FyZC4gICovCisKKyNpZmRlZglERUJVR19SWAorCXByaW50ZigicnggcmluZyBhZGRyZXNzIGlzICVYXG4iLCh1bnNpZ25lZCBsb25nKXJ4X3JpbmcpOworI2VuZGlmCisJb3V0bChwaHlzX3RvX2J1cygoaW50KXJ4X3JpbmcpLCBpb2FkZHIgKyBSeEJ1Zik7CisKKwkvKiBJZiB3ZSBhZGQgbXVsdGljYXN0IHN1cHBvcnQsIHRoZSBNQVIwIHJlZ2lzdGVyIHdvdWxkIGhhdmUgdG8gYmUKKwkgKiBpbml0aWFsaXplZCB0byAweGZmZmZmZmZmZmZmZmZmZmYgKHR3byAzMiBiaXQgYWNjZXNzZXMpLiAgRXRoZXJib290CisJICogb25seSBuZWVkcyBicm9hZGNhc3QgKGZvciBBUlAvUkFSUC9CT09UUC9ESENQKSBhbmQgdW5pY2FzdC4gICovCisKKwlvdXRiKENtZFJ4RW5iIHwgQ21kVHhFbmIsIGlvYWRkciArIENoaXBDbWQpOworCisJb3V0bChydGw4MTM5X3J4X2NvbmZpZywgaW9hZGRyICsgUnhDb25maWcpOworCisJLyogU3RhcnQgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzcy4gKi8KKwlvdXRsKDAsIGlvYWRkciArIFJ4TWlzc2VkKTsKKworCS8qIHNldF9yeF9tb2RlICovCisJc2V0X3J4X21vZGUoZGV2KTsKKworCS8qIERpc2FibGUgYWxsIGtub3duIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCisJb3V0dygwLCBpb2FkZHIgKyBJbnRyTWFzayk7Cit9CisKK3N0YXRpYyBpbnQgcnRsX3RyYW5zbWl0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCB0bzsKKwl1bnNpZ25lZCBsb25nIHR4c3RhdHVzOworCXVuc2lnbmVkIGludCBsZW4gPSBsZW5ndGg7CisKKwlpb2FkZHIgPSBkZXYtPmlvYmFzZTsKKworCW1lbWNweSgoY2hhciAqKXR4X2J1ZmZlciwgKGNoYXIgKilwYWNrZXQsIChpbnQpbGVuZ3RoKTsKKworI2lmZGVmCURFQlVHX1RYCisJcHJpbnRmKCJzZW5kaW5nICVkIGJ5dGVzXG4iLCBsZW4pOworI2VuZGlmCisKKwkvKiBOb3RlOiBSVEw4MTM5IGRvZXNuJ3QgYXV0by1wYWQsIHNlbmQgbWluaW11bSBwYXlsb2FkIChhbm90aGVyIDQKKwkgKiBieXRlcyBhcmUgc2VudCBhdXRvbWF0aWNhbGx5IGZvciB0aGUgRkNTLCB0b3RhbGxpbmcgdG8gNjQgYnl0ZXMpLiAqLworCXdoaWxlIChsZW4gPCBFVEhfWkxFTikgeworCQl0eF9idWZmZXJbbGVuKytdID0gJ1wwJzsKKwl9CisKKwlvdXRsKHBoeXNfdG9fYnVzKChpbnQpdHhfYnVmZmVyKSwgaW9hZGRyICsgVHhBZGRyMCArIGN1cl90eCo0KTsKKwlvdXRsKCgoVFhfRklGT19USFJFU0g8PDExKSAmIDB4MDAzZjAwMDApIHwgbGVuLAorCQlpb2FkZHIgKyBUeFN0YXR1czAgKyBjdXJfdHgqNCk7CisKKwl0byA9IGN1cnJ0aWNrcygpICsgUlRMX1RJTUVPVVQ7CisKKwlkbyB7CisJCXN0YXR1cyA9IGludyhpb2FkZHIgKyBJbnRyU3RhdHVzKTsKKwkJLyogT25seSBhY2tubG93bGVkZ2UgaW50ZXJydXB0IHNvdXJjZXMgd2UgY2FuIHByb3Blcmx5IGhhbmRsZQorCQkgKiBoZXJlIC0gdGhlIFJ4T3ZlcmZsb3cvUnhGSUZPT3ZlciBNVVNUIGJlIGhhbmRsZWQgaW4gdGhlCisJCSAqIHJ0bF9wb2xsKCkgZnVuY3Rpb24uICAqLworCQlvdXR3KHN0YXR1cyAmIChUeE9LIHwgVHhFcnIgfCBQQ0lFcnIpLCBpb2FkZHIgKyBJbnRyU3RhdHVzKTsKKwkJaWYgKChzdGF0dXMgJiAoVHhPSyB8IFR4RXJyIHwgUENJRXJyKSkgIT0gMCkgYnJlYWs7CisJfSB3aGlsZSAoY3VycnRpY2tzKCkgPCB0byk7CisKKwl0eHN0YXR1cyA9IGlubChpb2FkZHIgKyBUeFN0YXR1czAgKyBjdXJfdHgqNCk7CisKKwlpZiAoc3RhdHVzICYgVHhPSykgeworCQljdXJfdHggPSAoY3VyX3R4ICsgMSkgJSBOVU1fVFhfREVTQzsKKyNpZmRlZglERUJVR19UWAorCQlwcmludGYoInR4IGRvbmUgKCVkIHRpY2tzKSwgc3RhdHVzICVoWCB0eHN0YXR1cyAlWFxuIiwKKwkJCXRvLWN1cnJ0aWNrcygpLCBzdGF0dXMsIHR4c3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gbGVuZ3RoOworCX0gZWxzZSB7CisjaWZkZWYJREVCVUdfVFgKKwkJcHJpbnRmKCJ0eCB0aW1lb3V0L2Vycm9yICglZCB0aWNrcyksIHN0YXR1cyAlaFggdHhzdGF0dXMgJVhcbiIsCisJCQljdXJydGlja3MoKS10bywgc3RhdHVzLCB0eHN0YXR1cyk7CisjZW5kaWYKKwkJcnRsX3Jlc2V0KGRldik7CisKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHJ0bF9wb2xsKHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgcmluZ19vZmZzOworCXVuc2lnbmVkIGludCByeF9zaXplLCByeF9zdGF0dXM7CisJaW50IGxlbmd0aD0wOworCisJaW9hZGRyID0gZGV2LT5pb2Jhc2U7CisKKwlpZiAoaW5iKGlvYWRkciArIENoaXBDbWQpICYgUnhCdWZFbXB0eSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlzdGF0dXMgPSBpbncoaW9hZGRyICsgSW50clN0YXR1cyk7CisJLyogU2VlIGJlbG93IGZvciB0aGUgcmVzdCBvZiB0aGUgaW50ZXJydXB0IGFja25vd2xlZGdlcy4gICovCisJb3V0dyhzdGF0dXMgJiB+KFJ4RklGT092ZXIgfCBSeE92ZXJmbG93IHwgUnhPSyksIGlvYWRkciArIEludHJTdGF0dXMpOworCisjaWZkZWYJREVCVUdfUlgKKwlwcmludGYoInJ0bF9wb2xsOiBpbnQgJWhYICIsIHN0YXR1cyk7CisjZW5kaWYKKworCXJpbmdfb2ZmcyA9IGN1cl9yeCAlIFJYX0JVRl9MRU47CisJcnhfc3RhdHVzID0gKih1bnNpZ25lZCBpbnQqKUtTRUcxQUREUigocnhfcmluZyArIHJpbmdfb2ZmcykpOworCXJ4X3NpemUgPSByeF9zdGF0dXMgPj4gMTY7CisJcnhfc3RhdHVzICY9IDB4ZmZmZjsKKworCWlmICgocnhfc3RhdHVzICYgKFJ4QmFkU3ltYm9sfFJ4UnVudHxSeFRvb0xvbmd8UnhDUkNFcnJ8UnhCYWRBbGlnbikpIHx8CisJICAgIChyeF9zaXplIDwgRVRIX1pMRU4pIHx8IChyeF9zaXplID4gRVRIX0ZSQU1FX0xFTiArIDQpKSB7CisJCXByaW50ZigicnggZXJyb3IgJWhYXG4iLCByeF9zdGF0dXMpOworCQlydGxfcmVzZXQoZGV2KTsJLyogdGhpcyBjbGVhcnMgYWxsIGludGVycnVwdHMgc3RpbGwgcGVuZGluZyAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBSZWNlaXZlZCBhIGdvb2QgcGFja2V0ICovCisJbGVuZ3RoID0gcnhfc2l6ZSAtIDQ7CS8qIG5vIG9uZSBjYXJlcyBhYm91dCB0aGUgRkNTICovCisJaWYgKHJpbmdfb2Zmcys0K3J4X3NpemUtNCA+IFJYX0JVRl9MRU4pIHsKKwkJaW50IHNlbWlfY291bnQgPSBSWF9CVUZfTEVOIC0gcmluZ19vZmZzIC0gNDsKKwkJdW5zaWduZWQgY2hhciByeGRhdGFbUlhfQlVGX0xFTl07CisKKwkJbWVtY3B5KHJ4ZGF0YSwgcnhfcmluZyArIHJpbmdfb2ZmcyArIDQsIHNlbWlfY291bnQpOworCQltZW1jcHkoJihyeGRhdGFbc2VtaV9jb3VudF0pLCByeF9yaW5nLCByeF9zaXplLTQtc2VtaV9jb3VudCk7CisKKwkJTmV0UmVjZWl2ZShyeGRhdGEsIGxlbmd0aCk7CisjaWZkZWYJREVCVUdfUlgKKwkJcHJpbnRmKCJyeCBwYWNrZXQgJWQrJWQgYnl0ZXMiLCBzZW1pX2NvdW50LHJ4X3NpemUtNC1zZW1pX2NvdW50KTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCU5ldFJlY2VpdmUocnhfcmluZyArIHJpbmdfb2ZmcyArIDQsIGxlbmd0aCk7CisjaWZkZWYJREVCVUdfUlgKKwkJcHJpbnRmKCJyeCBwYWNrZXQgJWQgYnl0ZXMiLCByeF9zaXplLTQpOworI2VuZGlmCisJfQorCisJY3VyX3J4ID0gKGN1cl9yeCArIHJ4X3NpemUgKyA0ICsgMykgJiB+MzsKKwlvdXR3KGN1cl9yeCAtIDE2LCBpb2FkZHIgKyBSeEJ1ZlB0cik7CisJLyogU2VlIFJUTDgxMzkgUHJvZ3JhbW1pbmcgR3VpZGUgVjAuMSBmb3IgdGhlIG9mZmljaWFsIGhhbmRsaW5nIG9mCisJICogUnggb3ZlcmZsb3cgc2l0dWF0aW9ucy4gIFRoZSBkb2N1bWVudCBpdHNlbGYgY29udGFpbnMgYmFzaWNhbGx5IG5vCisJICogdXNhYmxlIGluZm9ybWF0aW9uLCBleGNlcHQgZm9yIGEgZmV3IGV4Y2VwdGlvbiBoYW5kbGluZyBydWxlcy4gICovCisJb3V0dyhzdGF0dXMgJiAoUnhGSUZPT3ZlciB8IFJ4T3ZlcmZsb3cgfCBSeE9LKSwgaW9hZGRyICsgSW50clN0YXR1cyk7CisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQgcnRsX2Rpc2FibGUoc3RydWN0IGV0aF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKworCS8qIHJlc2V0IHRoZSBjaGlwICovCisJb3V0YihDbWRSZXNldCwgaW9hZGRyICsgQ2hpcENtZCk7CisKKwkvKiBHaXZlIHRoZSBjaGlwIDEwbXMgdG8gZmluaXNoIHRoZSByZXNldC4gKi8KKwlmb3IgKGk9MDsgaTwxMDA7ICsraSl7CisJCWlmICgoaW5iKGlvYWRkciArIENoaXBDbWQpICYgQ21kUmVzZXQpID09IDApIGJyZWFrOworCQl1ZGVsYXkgKDEwMCk7IC8qIHdhaXQgMTAwdXMgKi8KKwl9Cit9CisjZW5kaWYJLyogQ0ZHX0NNRF9ORVQgJiYgQ09ORklHX05FVF9NVUxUSSAmJiBDT05GSUdfUlRMODEzOSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2V0aC5jIGIvbmV0L2V0aC5jCmluZGV4IGYyOTU3ODIuLmU2MDA5OGYgMTAwNjQ0Ci0tLSBhL25ldC9ldGguYworKysgYi9uZXQvZXRoLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIGV4dGVybiBpbnQgc2tnZV9pbml0aWFsaXplKGJkX3QqKTsKIGV4dGVybiBpbnQgdHNlY19pbml0aWFsaXplKGJkX3QqKTsKIGV4dGVybiBpbnQgYXUxeDAwX2VuZXRfaW5pdGlhbGl6ZShiZF90Kik7CitleHRlcm4gaW50IHJ0bDgxMzlfaW5pdGlhbGl6ZShiZF90Kik7CiAKIHN0YXRpYyBzdHJ1Y3QgZXRoX2RldmljZSAqZXRoX2RldmljZXMsICpldGhfY3VycmVudDsKIApAQCAtMTU0LDYgKzE1NSw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVUxWDAwKQogCWF1MXgwMF9lbmV0X2luaXRpYWxpemUoYmlzKTsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1JUTDgxMzkpCisJcnRsODEzOV9pbml0aWFsaXplKGJpcyk7CisjZW5kaWYKIAogCWlmICghZXRoX2RldmljZXMpIHsKIAkJcHV0cyAoIk5vIGV0aGVybmV0IGZvdW5kLlxuIik7Cg==